package com.qhgrain.app.service;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.paas.base.modules.utils.lang.StringUtil;
import com.qhgrain.app.constant.UrlEnum;
import com.qhgrain.app.util.ConfigUtil;
import com.qhgrain.app.vo.MenuVo;
import com.qhgrain.gway.util.HttpUtil;

@Service
public class MenuService {

	private static Logger LOG = LoggerFactory.getLogger(MenuService.class);
	
	private final static String BASE_URL = ConfigUtil.getProperties(UrlEnum.MENU_ROLE_PERMISSION)+"/menu";
	
	/**
	 * 
	 * @param appId 不能为空
	 * @param userId 如果是空，则全部，如果不为空，则根据userId过滤
	 * @param status 0正常，1停用，不传则表示查询全部
	 * @return
	 * @throws Exception
	 */
	public JSONArray getAll(String appId,String userId,String status) throws Exception{
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("appId", appId);
		if(StringUtil.isNotBlank(userId)){
			map.put("userId", userId);
		}
		if(StringUtil.isNotBlank(status)){
			map.put("status", status);
		}
		
		String restVo = HttpUtil.postFormParams(BASE_URL, "/query/all"	, map);
		JSONObject voJson = JSONObject.parseObject(restVo);
		if("1".equals(voJson.getString("state"))){
			JSONArray menusArray = voJson.getJSONArray("data");
			return menusArray;
		}else{
			LOG.error("根据条件从api获取菜单失败..."+restVo);
			throw new RuntimeException("根据条件从api获取菜单失败..."+restVo);
		}
	}
	/**
	 * 
	 * @param appId 不能为空
	 * @param userId 如果是空，则全部，如果不为空，则根据userId过滤
	 * @param status 0正常，1停用，不传则表示查询全部
	 * @return
	 * @throws Exception
	 */
	public List<MenuVo> getAll2(String appId,String userId,String status) throws Exception{
		JSONArray array = this.getAll(appId, userId, status);
		return JSONArray.parseArray(array.toJSONString(), MenuVo.class);
	}
	
	public MenuVo get(String menuId){
		String vo;
		try {
			vo = HttpUtil.get(BASE_URL+"/get/"+menuId.trim(), new HashMap<String,String>());
			JSONObject voJson = JSONObject.parseObject(vo);
			if("1".equals(voJson.getString("state"))){
				return JSONObject.parseObject(voJson.getString("data"), MenuVo.class);
			}else{
				LOG.error("根据menuId从api获取数据失败"+vo);
				throw new RuntimeException("根据menuId从api获取数据失败"+vo);
			}
		} catch (IOException e) {
			LOG.error("根据menuId从api获取数据失败",e);
			throw new RuntimeException(e);
		}
		
	}
}
